package cn.edu.tcu.db;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.edu.tcu.bean.AdminBean;

/**
 * 单例模式类
 * 
 * @author Administrator
 *
 */
public class DBDataSource {
	//数据源对象 ---静态实例变量
	private static DataSource dataSource;
	//构造方法私有化--禁止类的外部创建该类的实例对象
	private DBDataSource(){
	}
	/**
	 * 获取数据源对象
	 * 
	 * @author 数据源对象
	 */
	public static DataSource getDataSource(){
		//判定静态实例变量是否已经进行初始化（第一次访问需要进行初始化）
		if(dataSource == null){
			//初始化处理
			try {
				//使用工具类Properties读取配置文件的内容
				Properties prop = new Properties();
				//工具类Properties配置文件内容：要求db.properties文件不许放在src根目录下，不能放在包中
				prop.load(DBDataSource.class.getClassLoader().getResourceAsStream("db.properties"));
				//初始化数据对象：使用dbcp2的BasicDataSourceFactory类的createDataSource工厂方法获取数据源对象
				dataSource = BasicDataSourceFactory.createDataSource(prop);
			} catch (Exception e) {
				// 初始化异常
				e.printStackTrace();
			}	
		} 
	     return dataSource;
	}
	public static void main(String[] args)throws SQLException{
		Connection coon = getDataSource().getConnection();
		String sql = "SELECT * FROM admin";
		//使用dbutils查询数据库
		//创建一个查询对象queryrunner
		QueryRunner qr = new QueryRunner(getDataSource());
		//进行查询操作
		List<AdminBean> lstAdmins = qr.query(sql, new BeanListHandler<>(AdminBean.class));
		//遍历结果集将查询结果进行显示
		for(AdminBean adminBean: lstAdmins){
			System.out.println(adminBean.getAdminName());
		}
	}
}
